# -*- coding: utf-8 -*-
"""
@Time    : 2024/9/13 15:49 
@Author  : ZhangShenao 
@File    : 5.类的继承.py 
@Desc    : 类的继承

通过继承,子类可以继承父类的属性和方法
也可以定义自己特有的属性和方法
从而实现功能上的扩展
"""

from person import Person


class Student(Person):
    """学生类,继承Person父类"""

    def __init__(self, name: str, age: int, score: int):
        """
        构造函数
        :param name: 姓名,继承自父类
        :param age: 年龄,继承自父类
        :param score: 分数,子类特有的属性
        """

        # 调用父类的构造方法,执行父类的初始化操作
        super().__init__(name, age)

        # 执行子类自己的初始化操作
        self._score = score

    # 声明getter
    @property
    def score(self) -> int:
        """获取分数"""

        return self._score

    # 声明setter
    @score.setter
    def score(self, score: int) -> None:
        self._score = score

    # 定义子类自己的方法
    def study(self):
        """学习"""
        print(f"我是{self._name}同学，我要好好学习，天天向上！")


if __name__ == '__main__':
    # 创建子类对象
    tom = Student(name="Tom", age=12, score=98)

    # 子类继承了父类的属性和方法,可以直接调用
    print(f"name: {tom.name}, age: {tom.age}")
    tom.watch()

    # 访问子类自己的属性
    print(f"score: {tom.score}")

    # 调用子类自己的方法
    tom.study()
